<?php
class ControllerPaymentAlipayDB extends Controller {
	public function index() {
		$this->language->load('payment/alipay_db');

		$this->load->model('checkout/order');

		$order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
        print_r($order_info);
		if ($order_info) {
			$currencies = array(
				'AUD',
				'CAD',
				'EUR',
				'GBP',
				'JPY',
				'USD',
				'NZD',
				'CHF',
				'HKD',
				'SGD',
				'SEK',
				'DKK',
				'PLN',
				'NOK',
				'HUF',
				'CZK',
				'ILS',
				'MXN',
				'MYR',
				'BRL',
				'PHP',
				'TWD',
				'THB',
				'TRY'
			);
			
			if (in_array($order_info['currency_code'], $currencies)) {
				$currency = $order_info['currency_code'];
			} else {
				$currency = 'USD';
			}		
		
			$this->data['business'] = $this->config->get('alipay_db_email');
			$this->data['item_name'] = html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8');				
			$this->data['discount_amount_cart'] = 0;
			
            //echo $this->cart->getSubTotal();
            
			$total = $this->currency->format($order_info['total'] - $this->cart->getSubTotal(), $currency, false, false);

			if ($total <= 0) {
				$this->data['discount_amount_cart'] -= $this->currency->format($total, $currency, false, false);
			}
			$this->data['total'] = $order_info['total'];
            
			$this->load->library('encryption');
			$encryption = new Encryption($this->config->get('config_encryption'));
	
            $this->data['order_id'] = $this->session->data['order_id'];
			$this->data['custom'] = $encryption->encrypt($this->session->data['order_id']);
		
			if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/payment/alipay_db.tpl')) {
				$this->template = $this->config->get('config_template') . '/template/payment/alipay_db.tpl';
			} else {
				$this->template = 'default/template/payment/alipay_db.tpl';
			}
			//$this->render();
            $this->children = array(
                'common/header',
                'common/footer'
            );
            $this->response->setOutput($this->render());	
		}
	}
	
    public function goto(){
        /* *
         * 功能：担保交易接口接入页
         * 版本：3.2
         * 修改日期：2011-03-25
         * 说明：
         * 以下代码只是为了方便商户测试而提供的样例代码，商户可以根据自己网站的需要，按照技术文档编写,并非一定要使用该代码。
         * 该代码仅供学习和研究支付宝接口使用，只是提供一个参考。

         *************************注意*************************
         * 如果您在接口集成过程中遇到问题，可以按照下面的途径来解决
         * 1、商户服务中心（https://b.alipay.com/support/helperApply.htm?action=consultationApply），提交申请集成协助，我们会有专业的技术工程师主动联系您协助解决
         * 2、商户帮助中心（http://help.alipay.com/support/232511-16307/0-16307.htm?sh=Y&info_type=9）
         * 3、支付宝论坛（http://club.alipay.com/read-htm-tid-8681712.html）
         * 如果不想使用扩展功能请把扩展功能参数赋空值。
         
         * 总金额计算方式是：总金额=price*quantity+logistics_fee+discount。
         * 建议把price看作为总金额，是物流运费、折扣、购物车中购买商品总额等计算后的最终订单的应付总额。
         * 建议物流参数只使用一组，根据买家在商户网站中下单时选择的物流类型（快递、平邮、EMS），程序自动识别logistics_type被赋予三个中的一个值
         * 各家快递公司都属于EXPRESS（快递）的范畴
         */

        require_once("alipay.config.php");
        require_once("lib/alipay_service.class.php");

        /**************************请求参数**************************/

        //必填参数//

        $out_trade_no		= $this->request->post['order_id']; //date('Ymdhis');		//请与贵网站订单系统中的唯一订单号匹配
        $subject			= $this->request->post['subject'];	//订单名称，显示在支付宝收银台里的“商品名称”里，显示在支付宝的交易管理的“商品名称”的列表里。
        $body				= $this->request->post['alibody'];	//订单描述、订单详细、订单备注，显示在支付宝收银台里的“商品描述”里
        $price				= $this->request->post['total_fee'];	//订单总金额，显示在支付宝收银台里的“应付总额”里

        $logistics_fee		= "0.00";				//物流费用，即运费。
        $logistics_type		= "EXPRESS";			//物流类型，三个值可选：EXPRESS（快递）、POST（平邮）、EMS（EMS）
        $logistics_payment	= "SELLER_PAY";			//物流支付方式，两个值可选：SELLER_PAY（卖家承担运费）、BUYER_PAY（买家承担运费）

        $quantity			= "1";					//商品数量，建议默认为1，不改变值，把一次交易看成是一次下订单而非购买一件商品。

        //选填参数//

        //买家收货信息（推荐作为必填）
        //该功能作用在于买家已经在商户网站的下单流程中填过一次收货信息，而不需要买家在支付宝的付款流程中再次填写收货信息。
        //若要使用该功能，请至少保证receive_name、receive_address有值
        //收货信息格式请严格按照姓名、地址、邮编、电话、手机的格式填写
        $receive_name		= "收货人姓名";			//收货人姓名，如：张三
        $receive_address	= "收货人地址";			//收货人地址，如：XX省XXX市XXX区XXX路XXX小区XXX栋XXX单元XXX号
        $receive_zip		= "123456";				//收货人邮编，如：123456
        $receive_phone		= "0571-81234567";		//收货人电话号码，如：0571-81234567
        $receive_mobile		= "13312341234";		//收货人手机号码，如：13312341234

        //网站商品的展示地址，不允许加?id=123这类自定义参数
        $show_url			= "";

        /************************************************************/

        //构造要请求的参数数组
        $parameter = array(
                "service"			=> "create_partner_trade_by_buyer",
                "payment_type"		=> "1",
                
                "partner"			=> trim($aliapy_config['partner']),
                "_input_charset"	=> trim(strtolower($aliapy_config['input_charset'])),
                "seller_email"		=> trim($aliapy_config['seller_email']),
                "return_url"		=> trim($aliapy_config['return_url']),
                "notify_url"		=> trim($aliapy_config['notify_url']),

                "out_trade_no"		=> $out_trade_no,
                "subject"			=> $subject,
                "body"				=> $body,
                "price"				=> $price,
                "quantity"			=> $quantity,
                
                "logistics_fee"		=> $logistics_fee,
                "logistics_type"	=> $logistics_type,
                "logistics_payment"	=> $logistics_payment,
                
                "receive_name"		=> $receive_name,
                "receive_address"	=> $receive_address,
                "receive_zip"		=> $receive_zip,
                "receive_phone"		=> $receive_phone,
                "receive_mobile"	=> $receive_mobile,
                
                "show_url"			=> $show_url
        );
        //print_r($parameter);
        $html_text = "";
        //构造担保交易接口
        $alipayService = new AlipayService($aliapy_config);
        $html_text = $alipayService->create_partner_trade_by_buyer($parameter);
        
        $this->response->setOutput($html_text);
    }
    
	public function callback() {
    
        require_once("alipay.config.php");
        require_once("lib/alipay_notify.class.php");
        
        //计算得出通知验证结果
        $alipayNotify = new AlipayNotify($aliapy_config);
        $verify_result = $alipayNotify->verifyReturn();
        if($verify_result) {//验证成功
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //请在这里加上商户的业务逻辑程序代码
            
            //——请根据您的业务逻辑来编写程序（以下代码仅作参考）——
            //获取支付宝的通知返回参数，可参考技术文档中页面跳转同步通知参数列表
            $out_trade_no	= $this->request->get['out_trade_no'];	//获取订单号
            $trade_no		= $this->request->get['trade_no'];		//获取支付宝交易号
            $total_fee		= $this->request->get['price'];			//获取总价格

            if($_GET['trade_status'] == 'WAIT_SELLER_SEND_GOODS') {
                //判断该笔订单是否在商户网站中已经做过处理（可参考“集成教程”中“3.4返回数据处理”）
                    //如果没有做过处理，根据订单号（out_trade_no）在商户网站的订单系统中查到该笔订单的详细，并执行商户的业务程序
                    //如果有做过处理，不执行商户的业务程序
                    
                $this->load->library('encryption');
	
                $encryption = new Encryption($this->config->get('config_encryption'));
                
                if (isset($out_trade_no)) {
                    $order_id = $out_trade_no;
                } else {
                    $order_id = 0;
                }		
                
                $this->load->model('checkout/order');
                        
                $order_info = $this->model_checkout_order->getOrder($order_id);
                
                if ($order_info) {
                    $this->model_checkout_order->confirm($order_id, $this->config->get('config_order_status_id'));
                }    
                    
                    
            }
            else {
              echo "trade_status=".$this->request->get['trade_status'];
            }
                
            echo "验证成功<br />";
            echo "trade_no=".$trade_no;
            
            //——请根据您的业务逻辑来编写程序（以上代码仅作参考）——
            
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
        }
        else {
            //验证失败
            //如要调试，请看alipay_notify.php页面的verifyReturn函数，比对sign和mysign的值是否相等，或者检查$responseTxt有没有返回true
            echo "验证失败";
        }
	}
}
?>